草庐IT

c++ - 模板 typedef c++0x

全部标签

c++ - std::function 的模板参数(签名)不是其类型的一部分吗?

给定以下代码,歧义背后的原因是什么?我可以规避它还是必须保留(烦人的)显式转换?#includeusingnamespacestd;inta(constfunction&f){returnf();}inta(constfunction&f){returnf(0);}intx(){return22;}inty(int){return44;}intmain(){a(x);//Callisambiguous.a(y);//Callisambiguous.a((function)x);//Works.a((function)y);//Works.return0;}有趣的是,如果我注释掉a()功

c++ - 如何将 GCC 的 printf 格式属性与 C++11 可变参数模板一起使用?

我有一个C++类,它是日志系统的前端。它的日志记录功能是使用C++11的可变参数模板实现的:templatevoidFrontend::log(constchar*fmt,Args&&...args){backend->true_log(fmt,std::forward(args)...);}每个日志记录后端都实现了自己的true_log版本,除其他外,它使用转发的参数调用vsnprintf。例如:voidBackend::true_log(constchar*fmt,...){//otherstuff..va_listap;va_start(ap,fmt);vsnprintf(buf

c++ - 为什么允许嵌套类模板的部分特化,而不允许完全特化?

templatestructA{templatestructB{};.templatestructC{};};templatetemplatestructA::B{};//error:enclosingclasstemplatesarenotexplicitlyspecializedtemplatetemplatestructA::C{};//ok那么,如果外部类也不是特化的,那么为什么不允许对内部嵌套类(或函数)进行显式特化呢?很奇怪,如果我只是部分通过简单地添加一个虚拟模板参数来专门化内部类,我就可以解决这个问题。使事情变得更丑陋和更复杂,但它有效。我会将完全特化视为部分特化的子集

c++ - 派生模板类访问基类成员数据

这个问题是对thisthread中提出的问题的进一步插入.使用以下类定义:templateclassFoo{public:Foo(constfoo_arg_tfoo_arg):_foo_arg(foo_arg){/*dosomethingforfoo*/}TFoo_T;//eitheraTypeAoraTypeB-TBDfoo_arg_t_foo_arg;};templateclassBar:publicFoo{public:Bar(constfoo_arg_tbar_arg,consta_arg_ta_arg):Foo(bar_arg)//base-classinitializer{

c++ - 模板成员函数重载问题

N4296::13.1/2.2[over.load]的标准说:Likewise,memberfunctiontemplatedeclarationswiththesamename,thesameparameter-type-list,andthesametemplateparameterlistscannotbeoverloadedifanyofthemisastaticmemberfunctiontemplatedeclaration.所以,我认为下面的程序是病式的:#includestructA{templatestaticvoidfoo(){}templatestaticintf

c++ - 使用可变参数模板的递归继承

考虑以下代码:#includestructActionOption{virtualvoidfoo(int)const=0;};templatestructActionType;templatestructActionType:ActionOption{virtualvoidfoo(int)constoverride{std::cout::foo(int)called.\n";}};templatestructActionType:ActionOption{virtualvoidfoo(int)constoverride{std::cout::foo(int)called.\n";}};

c++ - 配对从可变参数模板中随机获得的兼容类型

ABow只能发射Missile类型Arrow,Bolt,或Dart(但不是Stone),并且只能与MissileContainer一起使用类型Quiver或Case.Quiver只能装箭或bolt,而Case只能装bolt、飞镖或石头。我已经声明了这一点:structBow:MissileFireWeapon,MissileTypes,MissileContainerTypes{/*...*/};structQuiver:MissileContainer,MissileTypes{};structCase:MissileContainer,MissileTypes{};在哪里templ

已编译但未使用的 C++ 模板 - mac OS Lion

我有一个非常非常奇怪的情况。我编写的代码看起来像这样:classFoo{public:templateintdoSomething(){std::cout如果我尝试像这样调用doSomething:std::cout();std::cout输出:PrePost我没有得到HelloWorld的输出,函数中的任何内容都没有执行。这自然意味着我的程序稍后会崩溃,因为我需要执行该函数。但是,如果我进行模板特化:templateintdoSomething(){std::cout那么我的输出是:PreHelloWorldint!Post这不会发生在Windows或Linux上,只会发生在Mac上

c++ - 如何防止 libwebsockets 客户端超时

我正在尝试使用libwebsockets创建一个C++websocket客户端,但由于超时,我无法建立连接。我已经剥离了测试的内容,这是我用来建立连接的内容:协议(protocol)staticintdefaultCallback(structlibwebsocket_context*context,structlibwebsocket*wsi,enumlibwebsocket_callback_reasonsreason,void*user,void*in,size_tlen){return0;}staticstructlibwebsocket_protocolsprotocols[

c++ - 从静态构造函数代码调用时 pthread 库失败

我有一个包含GLiblibrary的C++共享库对象。当我创建一个带有空main()函数的最小测试程序,并链接到共享库时,该程序在运行时立即中止,并显示以下GLib错误信息:GLib(gthread-posix.c):UnexpectederrorfromClibraryduring'pthread_cond_init':Invalidargument.Aborting.因为我的主函数是空的,错误一定是在某个地方的某个预主初始化函数中发生的。因此,使用GDB我发现GLib有一个静态初始化构造函数(在glib-init.c中),它在运行时调用main()之前。在该初始化函数中,它调用了p